<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    
    <title>28.12. inspect — Inspect live objects &mdash; Python v2.6.2 documentation</title>
    <link rel="stylesheet" href="../_static/default.css" type="text/css" />
    <link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
    <script type="text/javascript">
      var DOCUMENTATION_OPTIONS = {
        URL_ROOT:    '../',
        VERSION:     '2.6.2',
        COLLAPSE_MODINDEX: false,
        FILE_SUFFIX: '.html',
        HAS_SOURCE:  true
      };
    </script>
    <script type="text/javascript" src="../_static/jquery.js"></script>
    <script type="text/javascript" src="../_static/doctools.js"></script>
    <link rel="search" type="application/opensearchdescription+xml"
          title="Search within Python v2.6.2 documentation"
          href="../_static/opensearch.xml"/>
    <link rel="author" title="About these documents" href="../about.html" />
    <link rel="copyright" title="Copyright" href="../copyright.html" />
    <link rel="top" title="Python v2.6.2 documentation" href="../index.html" />
    <link rel="up" title="28. Python Runtime Services" href="python.html" />
    <link rel="next" title="28.13. site — Site-specific configuration hook" href="site.html" />
    <link rel="prev" title="28.11. gc — Garbage Collector interface" href="gc.html" />
    <link rel="shortcut icon" type="image/png" href="../_static/py.png" />
 

  </head>
  <body>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             accesskey="I">index</a></li>
        <li class="right" >
          <a href="../modindex.html" title="Global Module Index"
             accesskey="M">modules</a> |</li>
        <li class="right" >
          <a href="site.html" title="28.13. site — Site-specific configuration hook"
             accesskey="N">next</a> |</li>
        <li class="right" >
          <a href="gc.html" title="28.11. gc — Garbage Collector interface"
             accesskey="P">previous</a> |</li>
        <li><img src="../_static/py.png" alt=""
                 style="vertical-align: middle; margin-top: -1px"/></li>
        <li><a href="../index.html">Python v2.6.2 documentation</a> &raquo;</li>

          <li><a href="index.html" >The Python Standard Library</a> &raquo;</li>
          <li><a href="python.html" accesskey="U">28. Python Runtime Services</a> &raquo;</li> 
      </ul>
    </div>  

    <div class="document">
      <div class="documentwrapper">
        <div class="bodywrapper">
          <div class="body">
            
  <div class="section" id="module-inspect">
<h1>28.12. <tt class="xref docutils literal"><span class="pre">inspect</span></tt> &#8212; Inspect live objects<a class="headerlink" href="#module-inspect" title="Permalink to this headline">¶</a></h1>
<p>
<span class="versionmodified">New in version 2.1.</span></p>
<p>The <tt class="xref docutils literal"><span class="pre">inspect</span></tt> module provides several useful functions to help get
information about live objects such as modules, classes, methods, functions,
tracebacks, frame objects, and code objects.  For example, it can help you
examine the contents of a class, retrieve the source code of a method, extract
and format the argument list for a function, or get all the information you need
to display a detailed traceback.</p>
<p>There are four main kinds of services provided by this module: type checking,
getting source code, inspecting classes and functions, and examining the
interpreter stack.</p>
<div class="section" id="types-and-members">
<span id="inspect-types"></span><h2>28.12.1. Types and members<a class="headerlink" href="#types-and-members" title="Permalink to this headline">¶</a></h2>
<p>The <a title="inspect.getmembers" class="reference internal" href="#inspect.getmembers"><tt class="xref docutils literal"><span class="pre">getmembers()</span></tt></a> function retrieves the members of an object such as a
class or module. The sixteen functions whose names begin with &#8220;is&#8221; are mainly
provided as convenient choices for the second argument to <a title="inspect.getmembers" class="reference internal" href="#inspect.getmembers"><tt class="xref docutils literal"><span class="pre">getmembers()</span></tt></a>.
They also help you determine when you can expect to find the following special
attributes:</p>
<table border="1" class="docutils">
<colgroup>
<col width="18%" />
<col width="27%" />
<col width="44%" />
<col width="11%" />
</colgroup>
<thead valign="bottom">
<tr><th class="head">Type</th>
<th class="head">Attribute</th>
<th class="head">Description</th>
<th class="head">Notes</th>
</tr>
</thead>
<tbody valign="top">
<tr><td>module</td>
<td>__doc__</td>
<td>documentation string</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>__file__</td>
<td>filename (missing for
built-in modules)</td>
<td>&nbsp;</td>
</tr>
<tr><td>class</td>
<td>__doc__</td>
<td>documentation string</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>__module__</td>
<td>name of module in which
this class was defined</td>
<td>&nbsp;</td>
</tr>
<tr><td>method</td>
<td>__doc__</td>
<td>documentation string</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>__name__</td>
<td>name with which this
method was defined</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>im_class</td>
<td>class object that asked
for this method</td>
<td>(1)</td>
</tr>
<tr><td>&nbsp;</td>
<td>im_func or
__func__</td>
<td>function object
containing implementation
of method</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>im_self or
__self__</td>
<td>instance to which this
method is bound, or
<tt class="xref docutils literal"><span class="pre">None</span></tt></td>
<td>&nbsp;</td>
</tr>
<tr><td>function</td>
<td>__doc__</td>
<td>documentation string</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>__name__</td>
<td>name with which this
function was defined</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>func_code</td>
<td>code object containing
compiled function
<a class="reference external" href="../glossary.html#term-bytecode"><em class="xref">bytecode</em></a></td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>func_defaults</td>
<td>tuple of any default
values for arguments</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>func_doc</td>
<td>(same as __doc__)</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>func_globals</td>
<td>global namespace in which
this function was defined</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>func_name</td>
<td>(same as __name__)</td>
<td>&nbsp;</td>
</tr>
<tr><td>generator</td>
<td>__iter__</td>
<td>defined to support
iteration over container</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>close</td>
<td>raises new GeneratorExit
exception inside the
generator to terminate
the iteration</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>gi_code</td>
<td>code object</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>gi_frame</td>
<td>frame object or possibly
None once the generator
has been exhausted</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>gi_running</td>
<td>set to 1 when generator
is executing, 0 otherwise</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>next</td>
<td>return the next item from
the container</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>send</td>
<td>resumes the generator and
&#8220;sends&#8221; a value that
becomes the result of the
current yield-expression</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>throw</td>
<td>used to raise an
exception inside the
generator</td>
<td>&nbsp;</td>
</tr>
<tr><td>traceback</td>
<td>tb_frame</td>
<td>frame object at this
level</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>tb_lasti</td>
<td>index of last attempted
instruction in bytecode</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>tb_lineno</td>
<td>current line number in
Python source code</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>tb_next</td>
<td>next inner traceback
object (called by this
level)</td>
<td>&nbsp;</td>
</tr>
<tr><td>frame</td>
<td>f_back</td>
<td>next outer frame object
(this frame&#8217;s caller)</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_builtins</td>
<td>built-in namespace seen
by this frame</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_code</td>
<td>code object being
executed in this frame</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_exc_traceback</td>
<td>traceback if raised in
this frame, or <tt class="xref docutils literal"><span class="pre">None</span></tt></td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_exc_type</td>
<td>exception type if raised
in this frame, or
<tt class="xref docutils literal"><span class="pre">None</span></tt></td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_exc_value</td>
<td>exception value if raised
in this frame, or
<tt class="xref docutils literal"><span class="pre">None</span></tt></td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_globals</td>
<td>global namespace seen by
this frame</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_lasti</td>
<td>index of last attempted
instruction in bytecode</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_lineno</td>
<td>current line number in
Python source code</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_locals</td>
<td>local namespace seen by
this frame</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_restricted</td>
<td>0 or 1 if frame is in
restricted execution mode</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>f_trace</td>
<td>tracing function for this
frame, or <tt class="xref docutils literal"><span class="pre">None</span></tt></td>
<td>&nbsp;</td>
</tr>
<tr><td>code</td>
<td>co_argcount</td>
<td>number of arguments (not
including * or **
args)</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_code</td>
<td>string of raw compiled
bytecode</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_consts</td>
<td>tuple of constants used
in the bytecode</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_filename</td>
<td>name of file in which
this code object was
created</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_firstlineno</td>
<td>number of first line in
Python source code</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_flags</td>
<td>bitmap: 1=optimized <tt class="docutils literal"><span class="pre">|</span></tt>
2=newlocals <tt class="docutils literal"><span class="pre">|</span></tt> 4=*arg
<tt class="docutils literal"><span class="pre">|</span></tt> 8=**arg</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_lnotab</td>
<td>encoded mapping of line
numbers to bytecode
indices</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_name</td>
<td>name with which this code
object was defined</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_names</td>
<td>tuple of names of local
variables</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_nlocals</td>
<td>number of local variables</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_stacksize</td>
<td>virtual machine stack
space required</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>co_varnames</td>
<td>tuple of names of
arguments and local
variables</td>
<td>&nbsp;</td>
</tr>
<tr><td>builtin</td>
<td>__doc__</td>
<td>documentation string</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>__name__</td>
<td>original name of this
function or method</td>
<td>&nbsp;</td>
</tr>
<tr><td>&nbsp;</td>
<td>__self__</td>
<td>instance to which a
method is bound, or
<tt class="xref docutils literal"><span class="pre">None</span></tt></td>
<td>&nbsp;</td>
</tr>
</tbody>
</table>
<p>Note:</p>
<ol class="arabic">
<li><p class="first">
<span class="versionmodified">Changed in version 2.2: </span><tt class="xref docutils literal"><span class="pre">im_class</span></tt> used to refer to the class that defined the method.</p>
</li>
</ol>
<dl class="function">
<dt id="inspect.getmembers">
<tt class="descclassname">inspect.</tt><tt class="descname">getmembers</tt><big>(</big><em>object</em><span class="optional">[</span>, <em>predicate</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#inspect.getmembers" title="Permalink to this definition">¶</a></dt>
<dd><p>Return all the members of an object in a list of (name, value) pairs sorted by
name.  If the optional <em>predicate</em> argument is supplied, only members for which
the predicate returns a true value are included.</p>
<div class="admonition note">
<p class="first admonition-title">Note</p>
<p class="last"><a title="inspect.getmembers" class="reference internal" href="#inspect.getmembers"><tt class="xref docutils literal"><span class="pre">getmembers()</span></tt></a> does not return metaclass attributes when the argument
is a class (this behavior is inherited from the <a title="dir" class="reference external" href="functions.html#dir"><tt class="xref docutils literal"><span class="pre">dir()</span></tt></a> function).</p>
</div>
</dd></dl>

<dl class="function">
<dt id="inspect.getmoduleinfo">
<tt class="descclassname">inspect.</tt><tt class="descname">getmoduleinfo</tt><big>(</big><em>path</em><big>)</big><a class="headerlink" href="#inspect.getmoduleinfo" title="Permalink to this definition">¶</a></dt>
<dd><p>Return a tuple of values that describe how Python will interpret the file
identified by <em>path</em> if it is a module, or <tt class="xref docutils literal"><span class="pre">None</span></tt> if it would not be
identified as a module.  The return tuple is <tt class="docutils literal"><span class="pre">(name,</span> <span class="pre">suffix,</span> <span class="pre">mode,</span> <span class="pre">mtype)</span></tt>,
where <em>name</em> is the name of the module without the name of any enclosing
package, <em>suffix</em> is the trailing part of the file name (which may not be a
dot-delimited extension), <em>mode</em> is the <a title="open" class="reference external" href="functions.html#open"><tt class="xref docutils literal"><span class="pre">open()</span></tt></a> mode that would be used
(<tt class="docutils literal"><span class="pre">'r'</span></tt> or <tt class="docutils literal"><span class="pre">'rb'</span></tt>), and <em>mtype</em> is an integer giving the type of the
module.  <em>mtype</em> will have a value which can be compared to the constants
defined in the <a title="Access the implementation of the import statement." class="reference external" href="imp.html#module-imp"><tt class="xref docutils literal"><span class="pre">imp</span></tt></a> module; see the documentation for that module for
more information on module types.</p>
<p>
<span class="versionmodified">Changed in version 2.6: </span>Returns a <a class="reference external" href="../glossary.html#term-named-tuple"><em class="xref">named tuple</em></a> <tt class="docutils literal"><span class="pre">ModuleInfo(name,</span> <span class="pre">suffix,</span> <span class="pre">mode,</span>
<span class="pre">module_type)</span></tt>.</p>
</dd></dl>

<dl class="function">
<dt id="inspect.getmodulename">
<tt class="descclassname">inspect.</tt><tt class="descname">getmodulename</tt><big>(</big><em>path</em><big>)</big><a class="headerlink" href="#inspect.getmodulename" title="Permalink to this definition">¶</a></dt>
<dd>Return the name of the module named by the file <em>path</em>, without including the
names of enclosing packages.  This uses the same algorithm as the interpreter
uses when searching for modules.  If the name cannot be matched according to the
interpreter&#8217;s rules, <tt class="xref docutils literal"><span class="pre">None</span></tt> is returned.</dd></dl>

<dl class="function">
<dt id="inspect.ismodule">
<tt class="descclassname">inspect.</tt><tt class="descname">ismodule</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.ismodule" title="Permalink to this definition">¶</a></dt>
<dd>Return true if the object is a module.</dd></dl>

<dl class="function">
<dt id="inspect.isclass">
<tt class="descclassname">inspect.</tt><tt class="descname">isclass</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isclass" title="Permalink to this definition">¶</a></dt>
<dd>Return true if the object is a class.</dd></dl>

<dl class="function">
<dt id="inspect.ismethod">
<tt class="descclassname">inspect.</tt><tt class="descname">ismethod</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.ismethod" title="Permalink to this definition">¶</a></dt>
<dd>Return true if the object is a method.</dd></dl>

<dl class="function">
<dt id="inspect.isfunction">
<tt class="descclassname">inspect.</tt><tt class="descname">isfunction</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isfunction" title="Permalink to this definition">¶</a></dt>
<dd>Return true if the object is a Python function or unnamed (<a class="reference external" href="../glossary.html#term-lambda"><em class="xref">lambda</em></a>) function.</dd></dl>

<dl class="function">
<dt id="inspect.isgeneratorfunction">
<tt class="descclassname">inspect.</tt><tt class="descname">isgeneratorfunction</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isgeneratorfunction" title="Permalink to this definition">¶</a></dt>
<dd><p>Return true if the object is a Python generator function.</p>
<p>
<span class="versionmodified">New in version 2.6.</span></p>
</dd></dl>

<dl class="function">
<dt id="inspect.isgenerator">
<tt class="descclassname">inspect.</tt><tt class="descname">isgenerator</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isgenerator" title="Permalink to this definition">¶</a></dt>
<dd><p>Return true if the object is a generator.</p>
<p>
<span class="versionmodified">New in version 2.6.</span></p>
</dd></dl>

<dl class="function">
<dt id="inspect.istraceback">
<tt class="descclassname">inspect.</tt><tt class="descname">istraceback</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.istraceback" title="Permalink to this definition">¶</a></dt>
<dd>Return true if the object is a traceback.</dd></dl>

<dl class="function">
<dt id="inspect.isframe">
<tt class="descclassname">inspect.</tt><tt class="descname">isframe</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isframe" title="Permalink to this definition">¶</a></dt>
<dd>Return true if the object is a frame.</dd></dl>

<dl class="function">
<dt id="inspect.iscode">
<tt class="descclassname">inspect.</tt><tt class="descname">iscode</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.iscode" title="Permalink to this definition">¶</a></dt>
<dd>Return true if the object is a code.</dd></dl>

<dl class="function">
<dt id="inspect.isbuiltin">
<tt class="descclassname">inspect.</tt><tt class="descname">isbuiltin</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isbuiltin" title="Permalink to this definition">¶</a></dt>
<dd>Return true if the object is a built-in function.</dd></dl>

<dl class="function">
<dt id="inspect.isroutine">
<tt class="descclassname">inspect.</tt><tt class="descname">isroutine</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isroutine" title="Permalink to this definition">¶</a></dt>
<dd>Return true if the object is a user-defined or built-in function or method.</dd></dl>

<dl class="function">
<dt id="inspect.isabstract">
<tt class="descclassname">inspect.</tt><tt class="descname">isabstract</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isabstract" title="Permalink to this definition">¶</a></dt>
<dd><p>Return true if the object is an abstract base class.</p>
<p>
<span class="versionmodified">New in version 2.6.</span></p>
</dd></dl>

<dl class="function">
<dt id="inspect.ismethoddescriptor">
<tt class="descclassname">inspect.</tt><tt class="descname">ismethoddescriptor</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.ismethoddescriptor" title="Permalink to this definition">¶</a></dt>
<dd><p>Return true if the object is a method descriptor, but not if <a title="inspect.ismethod" class="reference internal" href="#inspect.ismethod"><tt class="xref docutils literal"><span class="pre">ismethod()</span></tt></a>
or <a title="inspect.isclass" class="reference internal" href="#inspect.isclass"><tt class="xref docutils literal"><span class="pre">isclass()</span></tt></a> or <a title="inspect.isfunction" class="reference internal" href="#inspect.isfunction"><tt class="xref docutils literal"><span class="pre">isfunction()</span></tt></a> are true.</p>
<p>This is new as of Python 2.2, and, for example, is true of
<tt class="docutils literal"><span class="pre">int.__add__</span></tt>. An object passing this test has a <tt class="xref docutils literal"><span class="pre">__get__</span></tt> attribute
but not a <tt class="xref docutils literal"><span class="pre">__set__</span></tt> attribute, but beyond that the set of attributes
varies.  <tt class="xref docutils literal"><span class="pre">__name__</span></tt> is usually sensible, and <tt class="xref docutils literal"><span class="pre">__doc__</span></tt> often is.</p>
<p>Methods implemented via descriptors that also pass one of the other tests
return false from the <a title="inspect.ismethoddescriptor" class="reference internal" href="#inspect.ismethoddescriptor"><tt class="xref docutils literal"><span class="pre">ismethoddescriptor()</span></tt></a> test, simply because the
other tests promise more &#8211; you can, e.g., count on having the
<tt class="xref docutils literal"><span class="pre">im_func</span></tt> attribute (etc) when an object passes <a title="inspect.ismethod" class="reference internal" href="#inspect.ismethod"><tt class="xref docutils literal"><span class="pre">ismethod()</span></tt></a>.</p>
</dd></dl>

<dl class="function">
<dt id="inspect.isdatadescriptor">
<tt class="descclassname">inspect.</tt><tt class="descname">isdatadescriptor</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isdatadescriptor" title="Permalink to this definition">¶</a></dt>
<dd><p>Return true if the object is a data descriptor.</p>
<p>Data descriptors have both a <tt class="xref docutils literal"><span class="pre">__get__</span></tt> and a <tt class="xref docutils literal"><span class="pre">__set__</span></tt> attribute.
Examples are properties (defined in Python), getsets, and members.  The
latter two are defined in C and there are more specific tests available for
those types, which is robust across Python implementations.  Typically, data
descriptors will also have <tt class="xref docutils literal"><span class="pre">__name__</span></tt> and <tt class="xref docutils literal"><span class="pre">__doc__</span></tt> attributes
(properties, getsets, and members have both of these attributes), but this is
not guaranteed.</p>
<p>
<span class="versionmodified">New in version 2.3.</span></p>
</dd></dl>

<dl class="function">
<dt id="inspect.isgetsetdescriptor">
<tt class="descclassname">inspect.</tt><tt class="descname">isgetsetdescriptor</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.isgetsetdescriptor" title="Permalink to this definition">¶</a></dt>
<dd><p>Return true if the object is a getset descriptor.</p>
<p>getsets are attributes defined in extension modules via <tt class="docutils literal"><span class="pre">PyGetSetDef</span></tt>
structures.  For Python implementations without such types, this method will
always return <tt class="xref docutils literal"><span class="pre">False</span></tt>.</p>
<p>
<span class="versionmodified">New in version 2.5.</span></p>
</dd></dl>

<dl class="function">
<dt id="inspect.ismemberdescriptor">
<tt class="descclassname">inspect.</tt><tt class="descname">ismemberdescriptor</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.ismemberdescriptor" title="Permalink to this definition">¶</a></dt>
<dd><p>Return true if the object is a member descriptor.</p>
<p>Member descriptors are attributes defined in extension modules via
<tt class="docutils literal"><span class="pre">PyMemberDef</span></tt> structures.  For Python implementations without such types,
this method will always return <tt class="xref docutils literal"><span class="pre">False</span></tt>.</p>
<p>
<span class="versionmodified">New in version 2.5.</span></p>
</dd></dl>

</div>
<div class="section" id="retrieving-source-code">
<span id="inspect-source"></span><h2>28.12.2. Retrieving source code<a class="headerlink" href="#retrieving-source-code" title="Permalink to this headline">¶</a></h2>
<dl class="function">
<dt id="inspect.getdoc">
<tt class="descclassname">inspect.</tt><tt class="descname">getdoc</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.getdoc" title="Permalink to this definition">¶</a></dt>
<dd>Get the documentation string for an object, cleaned up with <a title="inspect.cleandoc" class="reference internal" href="#inspect.cleandoc"><tt class="xref docutils literal"><span class="pre">cleandoc()</span></tt></a>.</dd></dl>

<dl class="function">
<dt id="inspect.getcomments">
<tt class="descclassname">inspect.</tt><tt class="descname">getcomments</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.getcomments" title="Permalink to this definition">¶</a></dt>
<dd>Return in a single string any lines of comments immediately preceding the
object&#8217;s source code (for a class, function, or method), or at the top of the
Python source file (if the object is a module).</dd></dl>

<dl class="function">
<dt id="inspect.getfile">
<tt class="descclassname">inspect.</tt><tt class="descname">getfile</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.getfile" title="Permalink to this definition">¶</a></dt>
<dd>Return the name of the (text or binary) file in which an object was defined.
This will fail with a <a title="exceptions.TypeError" class="reference external" href="exceptions.html#exceptions.TypeError"><tt class="xref docutils literal"><span class="pre">TypeError</span></tt></a> if the object is a built-in module,
class, or function.</dd></dl>

<dl class="function">
<dt id="inspect.getmodule">
<tt class="descclassname">inspect.</tt><tt class="descname">getmodule</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.getmodule" title="Permalink to this definition">¶</a></dt>
<dd>Try to guess which module an object was defined in.</dd></dl>

<dl class="function">
<dt id="inspect.getsourcefile">
<tt class="descclassname">inspect.</tt><tt class="descname">getsourcefile</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.getsourcefile" title="Permalink to this definition">¶</a></dt>
<dd>Return the name of the Python source file in which an object was defined.  This
will fail with a <a title="exceptions.TypeError" class="reference external" href="exceptions.html#exceptions.TypeError"><tt class="xref docutils literal"><span class="pre">TypeError</span></tt></a> if the object is a built-in module, class, or
function.</dd></dl>

<dl class="function">
<dt id="inspect.getsourcelines">
<tt class="descclassname">inspect.</tt><tt class="descname">getsourcelines</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.getsourcelines" title="Permalink to this definition">¶</a></dt>
<dd>Return a list of source lines and starting line number for an object. The
argument may be a module, class, method, function, traceback, frame, or code
object.  The source code is returned as a list of the lines corresponding to the
object and the line number indicates where in the original source file the first
line of code was found.  An <a title="exceptions.IOError" class="reference external" href="exceptions.html#exceptions.IOError"><tt class="xref docutils literal"><span class="pre">IOError</span></tt></a> is raised if the source code cannot
be retrieved.</dd></dl>

<dl class="function">
<dt id="inspect.getsource">
<tt class="descclassname">inspect.</tt><tt class="descname">getsource</tt><big>(</big><em>object</em><big>)</big><a class="headerlink" href="#inspect.getsource" title="Permalink to this definition">¶</a></dt>
<dd>Return the text of the source code for an object. The argument may be a module,
class, method, function, traceback, frame, or code object.  The source code is
returned as a single string.  An <a title="exceptions.IOError" class="reference external" href="exceptions.html#exceptions.IOError"><tt class="xref docutils literal"><span class="pre">IOError</span></tt></a> is raised if the source code
cannot be retrieved.</dd></dl>

<dl class="function">
<dt id="inspect.cleandoc">
<tt class="descclassname">inspect.</tt><tt class="descname">cleandoc</tt><big>(</big><em>doc</em><big>)</big><a class="headerlink" href="#inspect.cleandoc" title="Permalink to this definition">¶</a></dt>
<dd><p>Clean up indentation from docstrings that are indented to line up with blocks
of code.  Any whitespace that can be uniformly removed from the second line
onwards is removed.  Also, all tabs are expanded to spaces.</p>
<p>
<span class="versionmodified">New in version 2.6.</span></p>
</dd></dl>

</div>
<div class="section" id="classes-and-functions">
<span id="inspect-classes-functions"></span><h2>28.12.3. Classes and functions<a class="headerlink" href="#classes-and-functions" title="Permalink to this headline">¶</a></h2>
<dl class="function">
<dt id="inspect.getclasstree">
<tt class="descclassname">inspect.</tt><tt class="descname">getclasstree</tt><big>(</big><em>classes</em><span class="optional">[</span>, <em>unique</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#inspect.getclasstree" title="Permalink to this definition">¶</a></dt>
<dd>Arrange the given list of classes into a hierarchy of nested lists. Where a
nested list appears, it contains classes derived from the class whose entry
immediately precedes the list.  Each entry is a 2-tuple containing a class and a
tuple of its base classes.  If the <em>unique</em> argument is true, exactly one entry
appears in the returned structure for each class in the given list.  Otherwise,
classes using multiple inheritance and their descendants will appear multiple
times.</dd></dl>

<dl class="function">
<dt id="inspect.getargspec">
<tt class="descclassname">inspect.</tt><tt class="descname">getargspec</tt><big>(</big><em>func</em><big>)</big><a class="headerlink" href="#inspect.getargspec" title="Permalink to this definition">¶</a></dt>
<dd><p>Get the names and default values of a function&#8217;s arguments. A tuple of four
things is returned: <tt class="docutils literal"><span class="pre">(args,</span> <span class="pre">varargs,</span> <span class="pre">varkw,</span> <span class="pre">defaults)</span></tt>. <em>args</em> is a list of
the argument names (it may contain nested lists). <em>varargs</em> and <em>varkw</em> are the
names of the <tt class="docutils literal"><span class="pre">*</span></tt> and <tt class="docutils literal"><span class="pre">**</span></tt> arguments or <tt class="xref docutils literal"><span class="pre">None</span></tt>. <em>defaults</em> is a tuple of
default argument values or None if there are no default arguments; if this tuple
has <em>n</em> elements, they correspond to the last <em>n</em> elements listed in <em>args</em>.</p>
<p>
<span class="versionmodified">Changed in version 2.6: </span>Returns a <a class="reference external" href="../glossary.html#term-named-tuple"><em class="xref">named tuple</em></a> <tt class="docutils literal"><span class="pre">ArgSpec(args,</span> <span class="pre">varargs,</span> <span class="pre">keywords,</span>
<span class="pre">defaults)</span></tt>.</p>
</dd></dl>

<dl class="function">
<dt id="inspect.getargvalues">
<tt class="descclassname">inspect.</tt><tt class="descname">getargvalues</tt><big>(</big><em>frame</em><big>)</big><a class="headerlink" href="#inspect.getargvalues" title="Permalink to this definition">¶</a></dt>
<dd><p>Get information about arguments passed into a particular frame. A tuple of four
things is returned: <tt class="docutils literal"><span class="pre">(args,</span> <span class="pre">varargs,</span> <span class="pre">varkw,</span> <span class="pre">locals)</span></tt>. <em>args</em> is a list of the
argument names (it may contain nested lists). <em>varargs</em> and <em>varkw</em> are the
names of the <tt class="docutils literal"><span class="pre">*</span></tt> and <tt class="docutils literal"><span class="pre">**</span></tt> arguments or <tt class="xref docutils literal"><span class="pre">None</span></tt>. <em>locals</em> is the locals
dictionary of the given frame.</p>
<p>
<span class="versionmodified">Changed in version 2.6: </span>Returns a <a class="reference external" href="../glossary.html#term-named-tuple"><em class="xref">named tuple</em></a> <tt class="docutils literal"><span class="pre">ArgInfo(args,</span> <span class="pre">varargs,</span> <span class="pre">keywords,</span>
<span class="pre">locals)</span></tt>.</p>
</dd></dl>

<dl class="function">
<dt id="inspect.formatargspec">
<tt class="descclassname">inspect.</tt><tt class="descname">formatargspec</tt><big>(</big><em>args</em><span class="optional">[</span>, <em>varargs</em>, <em>varkw</em>, <em>defaults</em>, <em>formatarg</em>, <em>formatvarargs</em>, <em>formatvarkw</em>, <em>formatvalue</em>, <em>join</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#inspect.formatargspec" title="Permalink to this definition">¶</a></dt>
<dd>Format a pretty argument spec from the four values returned by
<a title="inspect.getargspec" class="reference internal" href="#inspect.getargspec"><tt class="xref docutils literal"><span class="pre">getargspec()</span></tt></a>.  The format* arguments are the corresponding optional
formatting functions that are called to turn names and values into strings.</dd></dl>

<dl class="function">
<dt id="inspect.formatargvalues">
<tt class="descclassname">inspect.</tt><tt class="descname">formatargvalues</tt><big>(</big><em>args</em><span class="optional">[</span>, <em>varargs</em>, <em>varkw</em>, <em>locals</em>, <em>formatarg</em>, <em>formatvarargs</em>, <em>formatvarkw</em>, <em>formatvalue</em>, <em>join</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#inspect.formatargvalues" title="Permalink to this definition">¶</a></dt>
<dd>Format a pretty argument spec from the four values returned by
<a title="inspect.getargvalues" class="reference internal" href="#inspect.getargvalues"><tt class="xref docutils literal"><span class="pre">getargvalues()</span></tt></a>.  The format* arguments are the corresponding optional
formatting functions that are called to turn names and values into strings.</dd></dl>

<dl class="function">
<dt id="inspect.getmro">
<tt class="descclassname">inspect.</tt><tt class="descname">getmro</tt><big>(</big><em>cls</em><big>)</big><a class="headerlink" href="#inspect.getmro" title="Permalink to this definition">¶</a></dt>
<dd>Return a tuple of class cls&#8217;s base classes, including cls, in method resolution
order.  No class appears more than once in this tuple. Note that the method
resolution order depends on cls&#8217;s type.  Unless a very peculiar user-defined
metatype is in use, cls will be the first element of the tuple.</dd></dl>

</div>
<div class="section" id="the-interpreter-stack">
<span id="inspect-stack"></span><h2>28.12.4. The interpreter stack<a class="headerlink" href="#the-interpreter-stack" title="Permalink to this headline">¶</a></h2>
<p>When the following functions return &#8220;frame records,&#8221; each record is a tuple of
six items: the frame object, the filename, the line number of the current line,
the function name, a list of lines of context from the source code, and the
index of the current line within that list.</p>
<div class="admonition warning">
<p class="first admonition-title">Warning</p>
<p>Keeping references to frame objects, as found in the first element of the frame
records these functions return, can cause your program to create reference
cycles.  Once a reference cycle has been created, the lifespan of all objects
which can be accessed from the objects which form the cycle can become much
longer even if Python&#8217;s optional cycle detector is enabled.  If such cycles must
be created, it is important to ensure they are explicitly broken to avoid the
delayed destruction of objects and increased memory consumption which occurs.</p>
<p>Though the cycle detector will catch these, destruction of the frames (and local
variables) can be made deterministic by removing the cycle in a
<a class="reference external" href="../reference/compound_stmts.html#finally"><tt class="xref docutils literal"><span class="pre">finally</span></tt></a> clause.  This is also important if the cycle detector was
disabled when Python was compiled or using <a title="gc.disable" class="reference external" href="gc.html#gc.disable"><tt class="xref docutils literal"><span class="pre">gc.disable()</span></tt></a>.  For example:</p>
<div class="last highlight-python"><pre>def handle_stackframe_without_leak():
    frame = inspect.currentframe()
    try:
        # do something with the frame
    finally:
        del frame</pre>
</div>
</div>
<p>The optional <em>context</em> argument supported by most of these functions specifies
the number of lines of context to return, which are centered around the current
line.</p>
<dl class="function">
<dt id="inspect.getframeinfo">
<tt class="descclassname">inspect.</tt><tt class="descname">getframeinfo</tt><big>(</big><em>frame</em><span class="optional">[</span>, <em>context</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#inspect.getframeinfo" title="Permalink to this definition">¶</a></dt>
<dd><p>Get information about a frame or traceback object.  A 5-tuple is returned, the
last five elements of the frame&#8217;s frame record.</p>
<p>
<span class="versionmodified">Changed in version 2.6: </span>Returns a <a class="reference external" href="../glossary.html#term-named-tuple"><em class="xref">named tuple</em></a> <tt class="docutils literal"><span class="pre">Traceback(filename,</span> <span class="pre">lineno,</span> <span class="pre">function,</span>
<span class="pre">code_context,</span> <span class="pre">index)</span></tt>.</p>
</dd></dl>

<dl class="function">
<dt id="inspect.getouterframes">
<tt class="descclassname">inspect.</tt><tt class="descname">getouterframes</tt><big>(</big><em>frame</em><span class="optional">[</span>, <em>context</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#inspect.getouterframes" title="Permalink to this definition">¶</a></dt>
<dd>Get a list of frame records for a frame and all outer frames.  These frames
represent the calls that lead to the creation of <em>frame</em>. The first entry in the
returned list represents <em>frame</em>; the last entry represents the outermost call
on <em>frame</em>&#8216;s stack.</dd></dl>

<dl class="function">
<dt id="inspect.getinnerframes">
<tt class="descclassname">inspect.</tt><tt class="descname">getinnerframes</tt><big>(</big><em>traceback</em><span class="optional">[</span>, <em>context</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#inspect.getinnerframes" title="Permalink to this definition">¶</a></dt>
<dd>Get a list of frame records for a traceback&#8217;s frame and all inner frames.  These
frames represent calls made as a consequence of <em>frame</em>.  The first entry in the
list represents <em>traceback</em>; the last entry represents where the exception was
raised.</dd></dl>

<dl class="function">
<dt id="inspect.currentframe">
<tt class="descclassname">inspect.</tt><tt class="descname">currentframe</tt><big>(</big><big>)</big><a class="headerlink" href="#inspect.currentframe" title="Permalink to this definition">¶</a></dt>
<dd>Return the frame object for the caller&#8217;s stack frame.</dd></dl>

<dl class="function">
<dt id="inspect.stack">
<tt class="descclassname">inspect.</tt><tt class="descname">stack</tt><big>(</big><span class="optional">[</span><em>context</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#inspect.stack" title="Permalink to this definition">¶</a></dt>
<dd>Return a list of frame records for the caller&#8217;s stack.  The first entry in the
returned list represents the caller; the last entry represents the outermost
call on the stack.</dd></dl>

<dl class="function">
<dt id="inspect.trace">
<tt class="descclassname">inspect.</tt><tt class="descname">trace</tt><big>(</big><span class="optional">[</span><em>context</em><span class="optional">]</span><big>)</big><a class="headerlink" href="#inspect.trace" title="Permalink to this definition">¶</a></dt>
<dd>Return a list of frame records for the stack between the current frame and the
frame in which an exception currently being handled was raised in.  The first
entry in the list represents the caller; the last entry represents where the
exception was raised.</dd></dl>

</div>
</div>


          </div>
        </div>
      </div>
      <div class="sphinxsidebar">
        <div class="sphinxsidebarwrapper">
            <h3><a href="../contents.html">Table Of Contents</a></h3>
            <ul>
<li><a class="reference external" href="">28.12. <tt class="docutils literal"><span class="pre">inspect</span></tt> &#8212; Inspect live objects</a><ul>
<li><a class="reference external" href="#types-and-members">28.12.1. Types and members</a></li>
<li><a class="reference external" href="#retrieving-source-code">28.12.2. Retrieving source code</a></li>
<li><a class="reference external" href="#classes-and-functions">28.12.3. Classes and functions</a></li>
<li><a class="reference external" href="#the-interpreter-stack">28.12.4. The interpreter stack</a></li>
</ul>
</li>
</ul>

            <h4>Previous topic</h4>
            <p class="topless"><a href="gc.html"
                                  title="previous chapter">28.11. <tt class="docutils literal docutils literal docutils literal"><span class="pre">gc</span></tt> &#8212; Garbage Collector interface</a></p>
            <h4>Next topic</h4>
            <p class="topless"><a href="site.html"
                                  title="next chapter">28.13. <tt class="docutils literal"><span class="pre">site</span></tt> &#8212; Site-specific configuration hook</a></p>
            <h3>This Page</h3>
            <ul class="this-page-menu">
              <li><a href="../_sources/library/inspect.txt"
                     rel="nofollow">Show Source</a></li>
            </ul>
          <div id="searchbox" style="display: none">
            <h3>Quick search</h3>
              <form class="search" action="../search.html" method="get">
                <input type="text" name="q" size="18" />
                <input type="submit" value="Go" />
                <input type="hidden" name="check_keywords" value="yes" />
                <input type="hidden" name="area" value="default" />
              </form>
              <p class="searchtip" style="font-size: 90%">
              Enter search terms or a module, class or function name.
              </p>
          </div>
          <script type="text/javascript">$('#searchbox').show(0);</script>
        </div>
      </div>
      <div class="clearer"></div>
    </div>
    <div class="related">
      <h3>Navigation</h3>
      <ul>
        <li class="right" style="margin-right: 10px">
          <a href="../genindex.html" title="General Index"
             >index</a></li>
        <li class="right" >
          <a href="../modindex.html" title="Global Module Index"
             >modules</a> |</li>
        <li class="right" >
          <a href="site.html" title="28.13. site — Site-specific configuration hook"
             >next</a> |</li>
        <li class="right" >
          <a href="gc.html" title="28.11. gc — Garbage Collector interface"
             >previous</a> |</li>
        <li><img src="../_static/py.png" alt=""
                 style="vertical-align: middle; margin-top: -1px"/></li>
        <li><a href="../index.html">Python v2.6.2 documentation</a> &raquo;</li>

          <li><a href="index.html" >The Python Standard Library</a> &raquo;</li>
          <li><a href="python.html" >28. Python Runtime Services</a> &raquo;</li> 
      </ul>
    </div>
    <div class="footer">
      &copy; <a href="../copyright.html">Copyright</a> 1990-2009, Python Software Foundation.
      Last updated on Apr 15, 2009.
      Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.1.
    </div>
  </body>
</html>